PIO is a set of techniques for moving data from one area of memory in a computing device to another area (usually on a different piece of hardware). The central processing unit (CPU) of the computing device is used throughout a PIO operation because the transferred data all pass through the CPU. Because of this intensive CPU use, and because of the overhead necessary to program the CPU before the transfer, PIO has in many scenarios been replaced by the more efficient (because less CPU-intensive) techniques of DMA (direct memory access). PIO, based on simpler digital logic, still has its place, however, where lower memory transfer rates are acceptable.
Programming PIO transactions is complicated and often confusing. Some confusion arises because different operating systems impose different requirements on software developers who write code for PIO transactions. These developers may have only incomplete knowledge of the PIO requirements and capabilities of a device. Also, the developers may have neither the time nor the inclination to master all of the details of a given device's PIO transactions. In consequence, each developer tries to use only as much of a device's PIO capabilities as is strictly necessary for his tasks. Code supporting PIO transactions is thus implemented in an ad hoc fashion which invites errors and inefficiencies and which does not provide a stable basis for future development.
The resulting situation is that PIO transactions often run at a level of efficiency lower than would otherwise be possible, and ill formed PIO transactions can slow down or even jeopardize the stability of computing systems.